package com.briup.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.query.SQLQuery;

import java.sql.Types;
import java.util.Collections;

/**
 * 当第一次构建项目或者 新的表添加
 * @Author briup-teacher
 * @Date 2023-11
 **/
public class MybatisplusGenerator {
    /**
     * 把需要动态修改的参数值提取 作为类的属性 直接修改，不需要阅读源码
     * @param args
     */
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/briup_test";
        String username = "root";
        String password = "root";
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("baomidou") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式 依赖中添加 swagger
                            .fileOverride() // 覆盖已生成文件
                            .disableOpenDir()//禁止打开目录
                            .author("briup-teacher")
                            .outputDir("D:\\mybatisplus_demo\\src\\main\\java"); // 指定输出目录
                })
                //数据库配置
                .dataSourceConfig(builder -> builder.databaseQueryClass(SQLQuery.class).typeConvert(new MySqlTypeConvert()).dbQuery(new MySqlQuery()))
                .packageConfig(builder -> {
                    builder.parent("com.briup") // 设置父包名
                            .entity("bean") //业务实体类所在包
                            .controller("web.controller")//web包
                           // .moduleName("system") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\mybatisplus_demo\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
                })
                //策略配置；指定不同的包中类的信息生成规则
                .strategyConfig(builder -> {
                    //设置entity类信息
                    builder.entityBuilder().enableFileOverride().build();
                    //builder.controllerBuilder().enableFileOverride().build();
                    //builder.serviceBuilder().enableFileOverride().build();
                    builder.mapperBuilder().enableFileOverride()
                            .enableBaseResultMap()
                            .enableBaseColumnList().build();
                    builder.likeTable(new LikeTable("t_")) //模糊匹配表
                            //.addInclude("t_student","t_teacher") // 设置需要生成的表名
                            .addTablePrefix("t_"); // 设置过滤表前缀
                })
                //模板
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
